<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // instanceof 运算符 判断是否为
        var arrp = [2, 344, 5]
        var obj = { name: 'hhh' }
        console.log(obj instanceof Object);//true
        console.log(arrp instanceof Array);//true
        console.log(obj instanceof Array);//false

        // 判断是否为数组 
        console.log(Array.isArray(arrp));//true
        console.log(Array.isArray(obj));//false

        function rev(arrs) {
            if (arrs instanceof Array) {  // 可以用这个代替(Array.isArray(arrs))
                let x = []
                for (let i = arrs.length - 1; i >= 0; i--) {
                    x[x.length] = arrs[i];
                }
                return x;
            } else {
                return '错误格式...';
            }
        }
        console.log(rev([1, 2, 3, 4, 5, 6]));
        console.log(rev(0,0));



        // push() 在数组末尾添加一个或多个元素 返回的是新数组的长度 原数组会变化
        let arr = [1, 2, 3]
        //  console.log( arr.push(4,'zyz'));//push()完毕返回的是数组的长度
        var y=arr.push(4, 'zyz')
        console.log(y);
        console.log(arr);

        // unshift() 在数组前面添加一个或多个元素 返回的是新数组的长度 原数组会变化
        arr.unshift('hug', 0)
        //  console.log( arr.unshift('hug',0));//push()完毕返回的是数组的长度
        console.log(arr);

        //  pop() 删除数组最后一个元素一次只能删一个 没有参数 返回的是删除的元素  原数组会变化
        arr.pop()
        // console.log(arr.pop()); //返回的是删除的元素
        console.log(arr);

        //  shift() 删除数组最前面一个元素一次只能删一个 没有参数 返回的是删除的元素  原数组会变化
        arr.shift()
        //console.log(arr.shift());
        console.log(arr);

        //    获取 大于2000的工资
        let li = [1000, 2000, 3000, 200, 500, 2300, 2100, 2400]
        let newar = []
        let newas = []
        for (let i = 0; i < li.length; i++) {
            if (li[i] > 2000) {
                newar[newar.length] = li[i];
            } else {
                newas.push(li[i])
            }
        }
        console.log(newar);
        console.log(newas);

        // 翻转数组
        let a = [1, 2, 3, 4, 5, 6]
        a.reverse()
        console.log(a);
        // 数组排序
        let b = [6, 3, 4, 5, 7, 6, 8]
        b.sort()
        console.log(b);
        // 如果数组中有十位的数就使用下面这个
        const numbers = [4, 2, 54, 1, 3];
        numbers.sort(function (a, b) {
            return a - b;//降序b-a
        });
        console.log(numbers);
        //    等价上面这个
        const numbers2 = [4, 2, 5, 1, 3];
        numbers2.sort((a, b) => a - b);
        console.log(numbers2);

        // 对象可以按照某个属性排序
        const items = [
            { name: 'Edward', value: 21 },
            { name: 'Sharpe', value: 37 },
            { name: 'And', value: 45 },
            { name: 'The', value: -12 },
            { name: 'Magnetic', value: 13 },
            { name: 'Zeros', value: 37 }
        ];
        // sort by value
        items.sort((a, b) => a.value - b.value);
        console.log(items);


        // indexOf() 返回数组索引号 如果有两个相同的只返回找到的第一个 不存在则返回-1   格式：indexOf(数组元素,[查找的起始位置])
        const p = ['zyz', 'pink', '8', 'hug','zyz']
        console.log(p.indexOf('zyz')); //0
        // console.log(p.indexOf(4));  //数组里面没有就返回-1

        // p.lastIndexOf() 返回数组索引号 如果有两个相同的只返回找到的第一个 不存在则返回-1    从后往前找



        // 装换为字符串方法 toString() 默认是逗号分割
        const to = ['hug', 'zyz', 'pyy']
        console.log(to.toString()); // hug,zyz,pyy

        // join() 方法 可以设置分隔符
        console.log(to.join('-')); // hug-zyz-pyy
        console.log(to.join(':')); // hug:zyz:pyy
        console.log(to.join('&')); // hug&zyz&pyy

        // 从索引 2 的位置开始删除 0 个元素，插入“drum”  splice() 此方法会改变原数组。
        // splice( 起始位置，删除几个，添加的元素)可以添加多个逗号隔开
        var myFish = ["angel", "clown", "mandarin", "sturgeon"];
        var removed = myFish.splice(2, 1, "drum");
        console.log(removed); // 被删除的['mandarin']
        console.log(myFish);  // ['angel', 'clown', 'drum', 'sturgeon']

        // slice() 方法返回一个新的数组对象，这一对象是一个由 begin 和 end 决定的原数组的浅拷贝（包括 begin，不包括end）。原始数组不会被改变
        var fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango'];
        var citrus = fruits.slice(1, 3);//slice(begin,end)（包括 begin，不包括end）
        console.log(citrus); // ['Orange', 'Lemon']
        console.log( fruits); // ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']


        // charAt() 根据索引返回字符串
        let o='hyyydsjjjs'
        console.log( o.charAt(7));
        for( let i=0;i<o.length;i++){
            console.log(o.charAt(i));
        }
        // o.charCodeAt()返回字符集ASCII
        console.log(o.charCodeAt(0));
        
    </script>
</body>

</html>